home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.mactech.com 2010
/
ftp.mactech.com.tar
/
ftp.mactech.com
/
machack
/
Hacks95
/
MagicTitleHack.sit
/
MagicTitle
/
MagicTitle Source&Stuff
/
Source
/
FinderAE.c
< prev
next >
Wrap
Text File
|
1995-06-22
|
4KB
|
176 lines
// FinderAE.c
#include "FinderAE.h"
#include <AppleEvents.h>
#include <AERegistry.h>
#include <Aliases.h>
#include "FileSystemStuff.h"
OSErr SelectItem(const FSSpec *file, Boolean bringInFront)
{
FSSpec parent;
OSErr err = GetParent(file, &parent);
if(!err)
err = FinderOpen(&parent, bringInFront);
if(!err)
err = SendRevealEvent(&parent, file, bringInFront);
return err;
}
OSErr FinderOpen(const FSSpec *item, Boolean bringInFront)
{
FSSpec parent;
OSErr err = GetParent(item, &parent);
if(err == fnfErr)
err = SendOpenSelectionEvent(item, item, bringInFront);
else if(!err)
err = SendOpenSelectionEvent(&parent, item, bringInFront);
if(!err && bringInFront)
ActivateFinder();
return err;
}
OSErr SendRevealEvent(const FSSpec *parent, const FSSpec *item, Boolean bringInFront)
{
OSType signature = 'MACS';
AEDesc addr = { typeNull, nil };
AEDescList list = { typeNull, nil };
AppleEvent event = { typeNull, nil }, reply = { typeNull, nil };
AliasHandle alias = nil;
AESendMode mode = kAENoReply;
OSErr err = NewAlias( 0, item, &alias );
if(err) goto exit;
err = AECreateDesc (typeApplSignature, (Ptr) &signature, sizeof (signature), &addr);
if(err) goto exit;
err = AECreateAppleEvent (kAEFinderEvents, kAERevealSelection, &addr, 0, 0, &event);
if(err) goto exit;
err = AECreateList (nil, 0, false, &list);
if(err) goto exit;
HLock((Handle)alias);
err = AEPutPtr( &list, 0, typeAlias, (Ptr)*alias, GetHandleSize((Handle) alias));
DisposeHandle((Handle) alias);
if(err) goto exit;
err = NewAlias( 0, parent, &alias );
if(err) goto exit;
HLock((Handle)alias);
err = AEPutParamPtr (&event, keyDirectObject, typeAlias, (Ptr)*alias, GetHandleSize((Handle) alias));
DisposeHandle( (Handle)alias );
if(err) goto exit;
err = AEPutParamDesc (&event, keySelection, &list);
if(err) goto exit;
if(bringInFront)
mode += kAECanSwitchLayer;
err = AESend ( &event, &reply, mode, kAENormalPriority, kAEDefaultTimeout, nil, nil);
exit:
if(addr.descriptorType != typeNull)
AEDisposeDesc (&addr);
if(event.descriptorType != typeNull)
AEDisposeDesc (&event);
if(reply.descriptorType != typeNull)
AEDisposeDesc (&reply);
if(list.descriptorType != typeNull)
AEDisposeDesc (&list);
return err;
}
OSErr SendOpenSelectionEvent(const FSSpec *parent, const FSSpec *item, Boolean bringInFront)
{
OSType signature = 'MACS';
AEDesc addr = { typeNull, nil };
AEDescList list = { typeNull, nil };
AppleEvent event = { typeNull, nil }, reply = { typeNull, nil };
AliasHandle alias = nil;
AESendMode mode = kAENoReply;
OSErr err = NewAlias( 0, item, &alias );
if(err) goto exit;
err = AECreateDesc (typeApplSignature, (Ptr) &signature, sizeof (signature), &addr);
if(err) goto exit;
err = AECreateAppleEvent (kAEFinderEvents, kAEOpenSelection, &addr, 0, 0, &event);
if(err) goto exit;
err = AECreateList (nil, 0, false, &list);
if(err) goto exit;
HLock((Handle)alias);
err = AEPutPtr( &list, 0, typeAlias, (Ptr)*alias, GetHandleSize((Handle) alias));
DisposeHandle((Handle) alias);
if(err) goto exit;
err = NewAlias( 0, parent, &alias );
if(err) goto exit;
HLock((Handle)alias);
err = AEPutParamPtr (&event, keyDirectObject, typeAlias, (Ptr)*alias, GetHandleSize((Handle) alias));
DisposeHandle( (Handle)alias );
if(err) goto exit;
err = AEPutParamDesc (&event, keySelection, &list);
if(err) goto exit;
if(bringInFront)
mode += kAECanSwitchLayer;
err = AESend ( &event, &reply, mode, kAENormalPriority, kAEDefaultTimeout, nil, nil);
exit:
if(addr.descriptorType != typeNull)
AEDisposeDesc (&addr);
if(event.descriptorType != typeNull)
AEDisposeDesc (&event);
if(reply.descriptorType != typeNull)
AEDisposeDesc (&reply);
if(list.descriptorType != typeNull)
AEDisposeDesc (&list);
return err;
}
OSErr ActivateFinder()
{
ProcessSerialNumber psn;
ProcessInfoRec theProc;
OSErr err = noErr;
psn.highLongOfPSN = 0;
psn.lowLongOfPSN = kNoProcess;
theProc.processInfoLength = sizeof(ProcessInfoRec);
theProc.processName = 0;
theProc.processAppSpec = 0;
theProc.processLocation = 0;
while (err == noErr)
{
OSErr err = GetNextProcess(&psn);
err = GetProcessInformation(&psn, &theProc);
if ((theProc.processType == 'FNDR') &&
(theProc.processSignature == 'MACS'))
break;
}
if(err == noErr)
err = SetFrontProcess(&psn);
return err;
}